<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // function a() {
      //   let x = 100
      // }
      // a()
      // console.log(x)
      //立即执行的函数，写法一：
      ;(function () {
        console.log('IIFE')
      })

      //写法二：

      //IIFE既可以传递采纳数，因为函数，也可以当成数据来使用，所以IIFE表达式也是尅传递函数作为参数
      ;(function (f) {
        f()
      })(function () {
        console.log('xxxx')
      })

      //IIFE也是可以传递参数的
      ;(function (m, n) {
        let result = m + n
        console.log(result)
      })(
        9,
        8
      )(
        //IIFE传递参数，有时为了能快速了解匿名函数大致的结构以及传递的参数，就需要能很快，很容易找到传递的参数

        //下列代码的写法，想要找到传递的参数，很困难
        function (f) {
          //想象有多行代码
        }
      )(100)(function (value, fun) {
        //value=100,fun=匿名函数
        fun(value) //这里可以快速的看到IIFE函数运用参数的情况
      })(100, function (value2) {
        //匿名函数
        //IIFE具体执行逻辑代码
        console.log(value2)
      })
    </script>
  </body>
</html>
